/************************************************************
 * Filename: Matrix2D.h
 * Purpose: Library for basic 2D matrix/transformation functions.
 * Author: Jeremy Kings
 * Revision: 2 (17 November 2010)
 * Base: Matrix2D.h - CS529 Project 3
 *
 * Copyright 2010, Digipen Institute of Technology
 ************************************************************/
#pragma once 

#include "Vector2D.h"

namespace Engine
{
	typedef D3DXMATRIXA16 Matrix4;

	/*
	This function returns the Identity matrix.
	*/
	Matrix4 Matrix4Identity();

	/*
	This functions calculated the transpose matrix of Mtx and returns it.
	*/
	Matrix4 Matrix4Transpose(const Matrix4& Mtx);

	/*
	This function creates a translation matrix from x & y and returns it.
	*/
	Matrix4 Matrix4Translate(float x, float y, float z);

	/*
	This function creates a scaling matrix from x & y and returns it.
	*/
	Matrix4 Matrix4Scale(float x, float y, float z);

	/*
	This matrix creates a rotation matrix from "Angle" whose value is in degree.
	Return the resultant matrix.
	*/
	Matrix4 Matrix4RotZDeg(float Angle);

	/*
	This matrix creates a rotation matrix from "Angle" whose value is in radian.
	Return the result.
	*/
	Matrix4 Matrix4RotZRad(float Angle);

	/*
	This function multiplies the matrix Mtx with the vector Vec and returns the result.
	*/
	Vector2D Matrix4MultVec2(const Matrix4& Mtx, Vector2D Vec);

	// Find the inverse of the givne matrix.
	Matrix4 Matrix4Inverse(const Matrix4& Mtx);
}
